package cn.tedu.review;

/**
 * @Author 金帮嘉诚
 * @Date 2021-06-15 周二 10:41
 */
/*本类用于复习面向对象3*/

/**
 * 知识点：
 */
public class ReviewOOP3 {
    public static void main(String[] args) {
        /*面向对象的第三大特性：多态--花木兰替父从军
         * 多态的前提是继承+重写
         * 口诀1：父类引用指向子类对象
         * 口诀2：编译看左边，运行看右边
         * 多态中重写的方法，声明使用的是父类的，方法体使用的是子类的
         * 除此之外，多态中使用的其他资源都是父类的
         * */
        Dog d = new WW();
        d.eat();
        d.play();
    }
}

//1.创建抽象类
/*被abstract修饰的类是抽象类,抽象类当中的方法可以是:全普通/全抽象/混合*/
abstract class Dog {
    public void eat() {
        System.out.println("爱吃肉骨头~");
    }

    abstract void play();
}

/*如果一个类继承了一个抽象父类，那么：
 * 方案一：继续抽象，变成抽象子类
 * 方案二：不在抽象，实现抽象父类中的所有抽象方法*/
/*如果一个类中有抽象方法，那么这类一定是抽象类
 * 如果一个抽象类中都是普通方法，为啥还要声明成抽象类呢？
 * 抽象类不可以实例化（创建对象），声明成抽象的是由于不想让给外界创建本类对象*/
//abstract class WW extends Dog{}
class WW extends Dog {
    @Override
    public void play() {
        System.out.println("实现抽象父类未实现的方法");
    }

}
